//package read.niit.service
//
//
//
//import java.io.{File, PrintWriter}
//import java.sql.DriverManager
//
//import org.apache.spark.SparkConf
//import org.apache.spark.rdd.RDD
//import org.apache.spark.sql.{Dataset, SaveMode}
//import org.apache.spark.streaming.{Seconds, StreamingContext}
//import read.niit.bean.{Reader, ReaderWithRecommendations}
//import read.niit.dao.ReaderBatchDao
//import read.niit.util.SparkUtil
//
//class ReaderBatchService {
//
//  private val spark = SparkUtil.takeSpark()
//  import spark.implicits._
//  import org.apache.spark.sql.functions._
//
//  def dataAnalysis(): Unit ={
//    //因为我们要做的是离线分析，所谓离线分析就是在历史数据中进行分析。历史数据一般会存放在数据库当中（MySQL/HBase）
//    //1.加载数据库  应该放到DAO里面，后面优化
//    val readDao = new ReaderBatchDao
//    val allInfoDS = readDao.getReaderData()
//
//    read_subjectCountTop10(allInfoDS)
//
//  }
//
//  //需求一(离线数据)：找到Top10热点书对应的类型，然后统计这些科目中，分别包含热点题的数量 DSL语法实现
//  def read_subjectCountTop10(allInfoDS:Dataset[ReaderWithRecommendations]): Unit ={
//    val hotTop10 =  allInfoDS.groupBy("book_id")
//      .agg(count("*") as "hotCount")
//      .orderBy('hotCount.desc)
//      .limit(10)
//    //2.2将hotTop10和allInfoDS进行关联，得到热门书对应的书籍类型  dropDuplicates:去重
//    val joinDF = hotTop10.join( allInfoDS.dropDuplicates("book_id"),"book_id")
//    //2.3按阅读类型分组聚合统计各个学科包含热点书籍的数量
//    val res = joinDF.groupBy("read_subject_id")
//      .agg(count("*") as "hotCount")
//      .orderBy('hotCount.desc)
//    res.show()
//
//
//  }
//
//
//}
